#pragma once

#include<iostream>
#include<sys/types.h>
#include<unistd.h>
#include<string>
#include<cstdio>
#include<signal.h>
#include<fcntl.h>
#include<fstream>


void daemon()
{
    
    //忽略IO，子进程退出等相关信号
    signal(SIGPIPE,SIG_IGN);
    signal(SIGCHLD,SIG_IGN);//

    if(fork()>0)
    {
        exit(0);//创建子进程，让其继承父进程的文件描述符，并让子进程成为孤儿进程
        //以便于进行会话的创建
    }
    
    setsid();//让其成为一个独立的会话
     std::string dev = "/dev/null";//文件垃圾桶
    int fd = ::open(dev.c_str(),O_RDWR);
    if(fd<0)
    {
        std::cout<<"open error"<<std::endl;
        exit(1);
    }
    else
    {
        dup2(fd,0);
        dup2(fd,1);
        dup2(fd,2);//将标准输出，标准输入，标准错误重定向到文件垃圾桶
        close(fd);
    }
}